Python3 基本数据类型
标准数据类型
Python3 中常见的数据类型有:
- Number(数字)
- String(字符串)
- bool(布尔类型)
- List(列表)
- Tuple(元组)
- Set(集合)
- Dictionary(字典)
Python3 的六个标准数据类型中:
- 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
- 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
此外还有一些高级的数据类型,如: 字节数组类型(bytes)。
# 数字类型
num_int = 42
num_float = 3.14159
num_complex = 1 + 2j
# 布尔类型
is_valid = True
is_finished = False
# 字符串
greeting = "Hello, World!"
multiline_str = """这是
多行
字符串"""
# 列表
fruits = ['apple', 'banana', 'cherry']
fruits.append('orange')
# 元组
colors = ('red', 'green', 'blue')
# 集合
unique_numbers = {1, 2, 3, 2, 1} # 实际存储 {1, 2, 3}
# 字典
person = {
'name': 'John',
'age': 30,
'city': 'New York'
}
# 打印示例
print("整数:", num_int)
print("浮点数:", num_float)
print("复数:", num_complex)
print("布尔值:", is_valid, is_finished)
print("字符串:", greeting)
print("多行字符串:", multiline_str)
print("列表:", fruits)
print("元组:", colors)
print("集合:", unique_numbers)
print("字典:", person)
Number
Python3 支持 int、float、bool、complex(复数)。
在 Python 3 中,bool 是 int 的子类,因此布尔值可以被看作整数来使用,其中 True 等价于 1。
issubclass(bool, int) # True
True + 1 # 2
False + 1 # 1
True == 1 # True
False == 0 # True
内置的 type() 函数可以用来查询变量所指的对象类型。
a, b, c, d = 20, 5.5, True, 4+3j
print(type(a), type(b), type(c), type(d))
# <class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
此外还可以用 isinstance 来判断:
a = 111
isinstance(a, int) # True
Python 的数字类型(如 int, float, decimal.Decimal)提供了一系列内置方法,用于数学运算、类型转换、进制处理等操作。以下是主要数字类型的方法及示例:
1. 通用方法(适用于 int 和 float)
数学运算
| 方法/操作符 | 说明 | 示例 |
|---|---|---|
+, -, *, / | 加减乘除 | 3 + 2 → 5 |
//, % | 取整除法、取模 | 7 // 2 → 3, 7 % 2 → 1 |
** | 幂运算 | 2 ** 3 → 8 |
abs(x) | 绝对值 | abs(-5) → 5 |
round(x[, n]) | 四舍五入(n为小数位数) | round(3.14159, 2) → 3.14 |
比较运算
| 操作符 | 说明 | 示例 |
|---|---|---|
==, !=, >, < | 等于、不等于、大于、小于 | 3 > 2 → True |
类型转换
| 方法 | 说明 | 示例 |
|---|---|---|
int(x) | 转为整数 | int(3.7) → 3 |
float(x) | 转为浮点数 | float(3) → 3.0 |
bool(x) | 转为布尔值 | bool(0) → False |
2. int 的独有方法
进制转换
| 方法 | 说明 | 示例 |
|---|---|---|
bin(x) | 转二进制字符串 | bin(10) → '0b1010' |
oct(x) | 转八进制字符串 | oct(10) → '0o12' |
hex(x) | 转十六进制字符串 | hex(255) → '0xff' |
int(s, base) | 从字符串按进制解析 | int('1010', 2) → 10 |
位运算
| 操作符 | 说明 | 示例 |
|---|---|---|
&, ` | , ^` | 按位与、或、异或 |
<<, >> | 左移、右移 | 4 << 1 → 8 |
3. float 的注意事项
- 精度问题:浮点数运算可能有误差(如
0.1 + 0.2 ≠ 0.3),需用decimal模块处理精确计算。 - 特殊值:
float('inf') # 正无穷
float('-inf') # 负无穷
float('nan') # 非数字
4. decimal.Decimal 的方法
用于高精度十进制运算(需导入 decimal 模块):
| 方法 | 说明 | 示例 |
|---|---|---|
Decimal(str) | 精确初始化 | Decimal('0.1') + Decimal('0.2') → Decimal('0.3') |
quantize() | 控制舍入规则 | Decimal('3.14159').quantize(Decimal('0.00')) → Decimal('3.14') |
5. 其他实用函数
| 函数 | 说明 | 示例 |
|---|---|---|
divmod(a, b) | 返回商和余数 | divmod(7, 3) → (2, 1) |
pow(x, y[, mod]) | 幂运算(可带模) | pow(2, 3, 3) → 2 |
math 模块 | 高级数学函数(如 sqrt, sin) | import math; math.sqrt(4) → 2.0 |
示例代码
# 整数操作
num = 10
print(bin(num)) # 输出: '0b1010'
print(num.bit_length()) # 输出: 4(二进制位数)
# 浮点数精度控制
from decimal import Decimal, getcontext
getcontext().prec = 6 # 设置精度
result = Decimal('1') / Decimal('7')
print(result) # 输出: 0.142857
# 数学函数
import math
print(math.gcd(12, 15)) # 输出: 3(最大公约数)
总结
int:进制转换、位运算。float:常规数学运算(注意精度问题)。decimal.Decimal:精确十进制计算。- 通用方法:比较、类型转换、基本运算。
String
- Python 中单引号
'和双引号"使用完全相同。 - 使用三引号(
'''或""")可以指定一个多行字符串。 - 转义符 \。
- 反斜杠可以用来转义,使用 r 可以让反斜杠不发生转义。 如
r"this is a line with \n"则\n会显示,并不是换行。 - 按字面意义级联字符串,如 "this " "is " "string" 会被自动转换为 this is string。
- 字符串可以用 + 运算符连接在一起,用 * 运算符重复。
- Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。
- Python 中的字符串不能改变。
- Python 没有单独的字符类型,一个字符就是长度为 1 的字符串。
- 字符串切片 str[start:end],其中 start(包含)是切片开始的索引,end(不包含)是切片结束的索引。
- 字符串的切片可以加上步长参数 step,语法格式如下:str[start:end:step]
#!/usr/bin/python3
str='123456789'
print(str) # 输出字符串
print(str[0:-1]) # 输出第一个到倒数第二个的所有字符
print(str[0]) # 输出字符串第一个字符
print(str[2:5]) # 输出从第三个开始到第六个的字符(不包含)
print(str[2:]) # 输出从第三个开始后的所有字符
print(str[1:5:2]) # 输出从第二个开始到第五个且每隔一个的字符(步长为2)
print(str * 2) # 输出字符串两次
print(str + '你好') # 连接字符串
print('------------------------------')
print('hello\nrunoob') # 使用反斜杠(\)+n转义特殊字符
print(r'hello\nrunoob') # 在字符串前面添加一个 r,表示原始字符串,不会发生转义
快速查看方法列表
# 列出所有非魔法方法
str_methods = [method for method in dir(str) if not method.startswith('__')]
print("字符串方法列表:", str_methods)
# 输出某个方法的帮助
help(str.upper) # 查看 upper() 的用法
这段代码使用了 列表推导式(List Comprehension) 来获取 Python 字符串类型(**str**)的所有公开方法,并过滤掉以双下划线 __ 开头的魔法方法(Magic Methods)
集合(Set)和列表(List)的区别
集合(Set)和列表(List)是 Python 中两种不同的数据结构,它们有以下主要区别:
| 特性 | 列表(List) | 集合(Set) |
|---|---|---|
| 有序性 | 有序,保持元素插入顺序 | 无序,不保证元素顺序 |
| 可变性 | 可变 | 可变 |
| 重复元素 | 允许重复元素 | 不允许重复元素(自动去重) |
| 表示符号 | 使用方括号 [] | 使用花括号 {} |
| 索引访问 | 支持索引访问(如 list[0]) | 不支持索引访问 |
| 查找效率 | O(n) | O(1)(基于哈希表实现) |
| 常用方法 | append(), insert(), remove(), pop() | add(), remove(), union(), intersection() |
| 内存占用 | 较少 | 较多(因为需要维护哈希表) |
| 应用场景 | 需要保持顺序或允许重复时使用 | 需要快速查找或去重时使用 |